package Offer;

import java.util.ArrayList;

public class p和为s的连续正数序列 {
    public int[][] findContinuousSequence(int target) {
        if (target < 3) return new int[0][];
        ArrayList<int[]> res = new ArrayList<>();
        int end = (target + 1) / 2;
        int left = 1, right = 1, sum = 0;
        // 窗口中的内容为【left，right - 1】
        while (left <= end){
            // 窗口元素小于目标值【扩大右边界】
            if (sum < target){
                sum += right;
                right++;
            } else if (sum > target) {
                // 窗口元素大于目标值【缩小左边界】
                sum -= left;
                left++;
            } else {
                int[] arr = new int[right - left];
                for (int i = left; i < right; i++) {
                    arr[i - left] = i;
                }
                res.add(arr);
                // 找到等于目标值的窗口【尝试缩小左边界】
                sum -= left;
                left++;
            }
        }
        return res.toArray(new int[res.size()][]);
    }
}

